{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1 -2.3025850929940455\n",
      "0.2 -1.6094379124341003\n",
      "0.3 -1.2039728043259361\n",
      "0.4 -0.916290731874155\n",
      "0.5 -0.6931471805599453\n",
      "0.6 -0.5108256237659907\n",
      "0.7 -0.35667494393873245\n",
      "0.8 -0.2231435513142097\n",
      "0.9 -0.10536051565782628\n"
     ]
    }
   ],
   "source": [
    "for i in range(1,10):\n",
    "    print(i/10, np.log(i / 10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.01"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1e-2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 梯度下降法中学习率的观察"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 梯度下降\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.         -0.95302013 -0.90604027 -0.8590604  -0.81208054 -0.76510067\n",
      " -0.71812081 -0.67114094 -0.62416107 -0.57718121 -0.53020134 -0.48322148\n",
      " -0.43624161 -0.38926174 -0.34228188 -0.29530201 -0.24832215 -0.20134228\n",
      " -0.15436242 -0.10738255 -0.06040268 -0.01342282  0.03355705  0.08053691\n",
      "  0.12751678  0.17449664  0.22147651  0.26845638  0.31543624  0.36241611\n",
      "  0.40939597  0.45637584  0.5033557   0.55033557  0.59731544  0.6442953\n",
      "  0.69127517  0.73825503  0.7852349   0.83221477  0.87919463  0.9261745\n",
      "  0.97315436  1.02013423  1.06711409  1.11409396  1.16107383  1.20805369\n",
      "  1.25503356  1.30201342  1.34899329  1.39597315  1.44295302  1.48993289\n",
      "  1.53691275  1.58389262  1.63087248  1.67785235  1.72483221  1.77181208\n",
      "  1.81879195  1.86577181  1.91275168  1.95973154  2.00671141  2.05369128\n",
      "  2.10067114  2.14765101  2.19463087  2.24161074  2.2885906   2.33557047\n",
      "  2.38255034  2.4295302   2.47651007  2.52348993  2.5704698   2.61744966\n",
      "  2.66442953  2.7114094   2.75838926  2.80536913  2.85234899  2.89932886\n",
      "  2.94630872  2.99328859  3.04026846  3.08724832  3.13422819  3.18120805\n",
      "  3.22818792  3.27516779  3.32214765  3.36912752  3.41610738  3.46308725\n",
      "  3.51006711  3.55704698  3.60402685  3.65100671  3.69798658  3.74496644\n",
      "  3.79194631  3.83892617  3.88590604  3.93288591  3.97986577  4.02684564\n",
      "  4.0738255   4.12080537  4.16778523  4.2147651   4.26174497  4.30872483\n",
      "  4.3557047   4.40268456  4.44966443  4.4966443   4.54362416  4.59060403\n",
      "  4.63758389  4.68456376  4.73154362  4.77852349  4.82550336  4.87248322\n",
      "  4.91946309  4.96644295  5.01342282  5.06040268  5.10738255  5.15436242\n",
      "  5.20134228  5.24832215  5.29530201  5.34228188  5.38926174  5.43624161\n",
      "  5.48322148  5.53020134  5.57718121  5.62416107  5.67114094  5.71812081\n",
      "  5.76510067  5.81208054  5.8590604   5.90604027  5.95302013  6.        ]\n"
     ]
    }
   ],
   "source": [
    "plot_x = np.linspace(-1, 6, 150)\n",
    "print(plot_x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "plot_y = (plot_x - 2.5) ** 2 - 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARqhJREFUeJzt3Xd4k+XiPvA7SZukI+neTQezFGgptCAgioAgAoIDURFxHD0qDkSPynHg14V6jkeO44eCCwciDoZ4ABFZAmUXWyiF0kJL9yLdSZq8vz/SFlBERpIn4/5cV65L00jutJXced5nyCRJkkBERETkIHLRAYiIiMizsHwQERGRQ7F8EBERkUOxfBAREZFDsXwQERGRQ7F8EBERkUOxfBAREZFDsXwQERGRQ3mJDvB7FosFpaWl0Gg0kMlkouMQERHReZAkCQ0NDYiOjoZcfu6xDacrH6WlpdDpdKJjEBER0UUoLi5GbGzsOR/jdOVDo9EAsIbXarWC0xAREdH5qK+vh06n63wfPxenKx8dl1q0Wi3LBxERkYs5nykTnHBKREREDsXyQURERA7F8kFEREQOxfJBREREDsXyQURERA7F8kFEREQOxfJBREREDsXyQURERA7F8kFEREQOxfJBREREDsXyQURERA7F8kFEREQO5THlo6K+Ff/9+QheW31IdBQiIiIhWk1m/G3Rbny9qwgms0VYDo8qH2/9fBiLth1Ds7FNdBwiIiKH23y4Cj/nVuCtdUegOI/TZ+3FY8pH35gAxAX7osVkxvrcStFxiIiIHG7Vb2UAgHEpUZDLWT7sTiaTYXxKFABg1W+lgtMQERE5VovRjJ9zKwCg8/1QFI8pHwAwPiUaALAhrwoNrSbBaYiIiBxnQ14lmo1mxAb5oJ8uUGgWjyofvaI06BLmB2ObpbP9EREReYKOUf9xKVGQCZzvAXhY+bBeerGOfqzaXyY4DRERkWM0GdrwyyHrfMcJ7e+DInlU+QCACe3XuTYfqYK+mZdeiIjI/f2cW4FWkwUJIb7oHa0VHcfzykf3CA16RmhgMktYe7BcdBwiIiK761jlMj4lWvglF8ADyweA01a98NILERG5t/pWEzblVQEAxqeKXeXSwTPLR6r1etfW/GrUNhkFpyEiIrKfdQcqYDRb0C3cHz0jNKLjAPDQ8pEY6ofe0VqYLRJW53D0g4iI3NcP7atcxjvBKpcOHlk+AHDVCxERub26JiN+PVIN4NT7njPw4PJhve61o7AGlQ2tgtMQERHZ3toD5WizSEiK1KBbuL/oOJ08tnzogn2RqguERQJWZ3PVCxERuZ+OhRUTUp1n1APw4PIBnNrzg2e9EBGRu6luNGDb0Y5LLs6xyqWDR5ePce0/jF3H6lCmbxGchoiIyHZW55TDIgEpsQGID/ETHecMHl0+ogJ8kJEQBAD4kXt+EBGRG1m1/9QqF2fj0eUDOG3VC8sHERG5icr6Vuw8VgsAGOdEq1w6eHz5GNs3EnIZkFV8EkU1zaLjEBERXbJVv5VBkoD+cYGICfQRHecPPL58hGvUGNw1BMCpjViIiIhc2Yr2Sy7XOdkqlw4eXz4AYGJqDABgZRbLBxERubbjNU3YX3wScplzXnIBWD4AAGP6REKpkCOvogGHyutFxyEiIrpoHR+kh3YLRZhGJTjN2bF8AAjw8cbwnmEAOPpBRESuS5Ikp7/kArB8dLqun/WHtHJ/KSRJEpyGiIjowuWWNSC/shFKLznG9IkUHedPsXy0G5kUAT+lAifqWrC36KToOERERBdsZfuox4ie4dCqvQWn+XMsH+18lAqM7m1tiSuzSgSnISIiujAWi4QfOi659HPeSy4Ay8cZOn5YP2aXoc1sEZyGiIjo/O0tqkPJyRb4q7wwIilcdJxzYvk4zeXdQhHk643qRiO2Ha0RHYeIiOi8rWhfMDG6dwTU3grBac6N5eM03gp552FzHdfNiIiInJ3JbMH/sq3HhEzsFyM4zV9j+fid69o3HFubU45Wk1lwGiIior+2Nb8aNU1GhPgpMbR9125nxvLxO+nxQYgOUKPB0IaNeZWi4xAREf2ljtH6cSlR8FI4/1v7BSfcvHkzJkyYgOjoaMhkMixfvvyMr0uShOeffx5RUVHw8fHBqFGjcOTIEVvltTu5XIYJ7RuzrOCGY0RE5ORaTWaszSkH4Nwbi53ugstHU1MTUlNT8d57753162+88QbefvttvP/++9ixYwf8/PwwZswYtLa2XnJYR+lY9bL+UCUaWk2C0xAREf25Xw5VosloRkygD/rHBYmOc168LvQ/GDt2LMaOHXvWr0mShHnz5uHZZ5/FxIkTAQCfffYZIiIisHz5ctxyyy2XltZBkqO06Brmh6NVTVh7oAI3DYgVHYmIiOisVrTvTTUhNRpyuUxwmvNj0wtDhYWFKC8vx6hRozrvCwgIwKBBg7B9+/az/jcGgwH19fVn3ESTyWSds4W56oWIiJyVvsWEDXlVAICJTr6x2OlsWj7Ky63XnCIiIs64PyIiovNrvzd37lwEBAR03nQ6nS0jXbSO62Zb86tR1WAQnIaIiOiP1h4oh7HNgu7h/kiK1IiOc96ET4mdPXs29Hp95624uFh0JABAQqgfUnWBMFskrPqNox9EROR8lu+zXnKZlBYDmcw1LrkANi4fkZHWs1EqKirOuL+ioqLza7+nUqmg1WrPuDmL69uHsDp+uERERM6iTN+C7QXW3bhdZZVLB5uWj8TERERGRmL9+vWd99XX12PHjh0YPHiwLZ/KIcanRkMhl2H/CT2OVjWKjkNERNRpRVYpJAkYmBAMXbCv6DgX5ILLR2NjI7KyspCVlQXAOsk0KysLRUVFkMlkmDlzJl5++WWsXLkS2dnZuOOOOxAdHY1JkybZOLr9hfqrcEX3UADACo5+EBGRE+kYlb++v/Nvp/57F1w+du/ejbS0NKSlpQEAZs2ahbS0NDz//PMAgCeffBIPP/ww7rvvPmRkZKCxsRFr1qyBWq22bXIHmZRm/aEuyyqBJEmC0xAREQG5ZfU4VN4ApUKOa/tEiY5zwS54n4/hw4ef801YJpPhxRdfxIsvvnhJwZzF6ORI+CkVKK5twd6iOgyIDxYdiYiIPFzHqMeIpHAE+HoLTnPhhK92cXY+SgWuaW+Vy3jphYiIBDNbpM7jPzpG510Ny8d5uL79h7vqtzIY2yyC0xARkSfbUVCD8vpWaNVeuCopTHSci8LycR4Gdw1BuEaFk80mnnRLRERCdYzCj0uJhspLITjNxWH5OA8Kuaxz29rlWbz0QkREYrSazFjdfoLt9S56yQVg+ThvHdfVfs6thL6FJ90SEZHj/ZxbgUZDG2ICfZAe7xon2J4Ny8d5So7SokeEP4xtFqzJKRMdh4iIPNCp7dRd5wTbs2H5OE8ymezUnh9c9UJERA5W22TExvYTbF35kgvA8nFBJvaz/rAzC2pRcrJFcBoiIvIkq34rRZtFQt+YAHQLd50TbM+G5eMCxAT6YFCidZOxlVk86ZaIiBxn2Wkn2Lo6lo8LdH3npZcT3G6diIgc4lh1E/YVnYRcBkxIdb3t1H+P5eMCje0bBaWXHIcrGnGgtF50HCIi8gAdox5Du4UiXOOaZ6WdjuXjAgX4eOPqXhEAgO/3cuIpERHZl8Ui4ft9JwAANw2IFZzGNlg+LsIN7ccXr8gqgcnM7daJiMh+dh2rRXFtC/xVXhidHCk6jk2wfFyEK3qEIdRfiZomIza1L3siIiKyh+/2Wkc9ru0bCR+la26n/nssHxfBWyHvXHbb8UtBRERkay1GM/6Xbd1O/cb+7nHJBWD5uGgdvwTrcytxstkoOA0REbmjnw6Wo9HQBl2wDzISgkXHsRmWj4uUHK1FrygtjGYLfviN260TEZHtfbvHOrp+fVqsS2+n/nssH5fgxvaJp9/t4aUXIiKyrXJ9K7bmVwM49X7jLlg+LsHEfjFQyGXIKj6Jo1WNouMQEZEbWZ5VAosEZCQEIT7ET3Qcm2L5uARhGhWu7BEGgKMfRERkO5Ikdb6vuNNE0w4sH5eo45di2b4SWCzcbp2IiC5ddokeRyobofKS49oU199O/fdYPi7RyF7h0Kq9UKZvxfaCGtFxiIjIDXTsoD26dyS0am/BaWyP5eMSqb0VmJAaDYCXXoiI6NIZ2yxYkWUtH+420bQDy4cN3Ni+1/7qHOt6bCIioou1Ia8Sdc0mhGtUGNY9THQcu2D5sIE0XSASQ/3QYjJjdTb3/CAioov3XefeHtYVle6I5cMGZDJZ59AYT7olIqKLVdtkxIa8SgDADW64yqUDy4eNXN8/FjIZsL2gBsW1zaLjEBGRC/phfylMZgl9YrToGakRHcduWD5sJCbQB0O6hgDgYXNERHRxlu4uBgDc5MajHgDLh03dnK4DAHyz+wT3/CAiogtyoFSPA6X1UJ52crq7YvmwoTG9I6FRe6HkZAsyuecHERFdgG92W0fNr+4dgSA/peA09sXyYUNqbwWua9/zo2PojIiI6K8Y2sxY3r63x+QB7n3JBWD5sLmOSy+rc8pR32oSnIaIiFzBzwcrcbLZhEit2m339jgdy4eNpcQGoGeEBoY2C37YXyo6DhERuYBv9rRPNB0Q67Z7e5yO5cPGZDIZJqdbh8yW7uaqFyIiOrcyfQs2H64CYC0fnoDlww4mpcXASy7D/uKTOFzRIDoOERE5se/3lsAiAQMTg5EQ6ic6jkOwfNhBqL8KI5LCAQDfcOIpERH9CUmSOt8nPGGiaQeWDzvpmHi6bF8JTGaL4DREROSMdh2rw7GaZvgpFbi2b5ToOA7D8mEnw3uGIUyjQnWjERsOVYqOQ0RETqhjW4bxKdHwU3kJTuM4LB924qWQ44Y06w51nHhKRES/12how4+/WU9C71io4ClYPuyo45dpQ14lKhtaBachIiJn8uNvpWgxmdEl1A8D4oNEx3Eolg876hauQf+4QJgtEpbvKxEdh4iInEjHduqT03WQydx/b4/TsXzY2eT2iadLd5+AJPGwOSIiAo5WNWL38TrIZcAN/d37ELmzYfmws/EpUVB7y5Ff2Yi9RSdFxyEiIifQMdF0eM9wRGjVgtM4ns3Lh9lsxnPPPYfExET4+Piga9eueOmllzz2U79G7Y1xfa2HzS3ZWSQ4DRERiWYyW/DdHusll45tGTyNzcvH66+/jvnz5+Pdd99Fbm4uXn/9dbzxxht45513bP1ULuPWgdZfrlW/laGBh80REXm09bkVqG40ItRfhZG9wkXHEcLm5WPbtm2YOHEixo0bh4SEBNx0000YPXo0du7caeunchkD4oPQLdwfLSYzVvKwOSIij/bVzvYdTdNj4a3wzNkPNn/VQ4YMwfr163H48GEAwP79+/Hrr79i7Nixtn4qlyGTyXBLhnX0Y8lObrdOROSpTtQ1Y/MR6yFyUzz0kgsA2Hw7taeffhr19fVISkqCQqGA2WzGK6+8gqlTp5718QaDAQaDofPf6+vrbR3JKdzQPxZvrMlDdokeOSV69IkJEB2JiIgc7JvdJyBJwOAuIR5ziNzZ2HzkY+nSpfjyyy+xePFi7N27F4sWLcK///1vLFq06KyPnzt3LgICAjpvOp17NsFgPyVG944AACzZxYmnRESexmw5dYjcLQPd873ufMkkGy9D0el0ePrppzFjxozO+15++WV88cUXOHTo0B8ef7aRD51OB71eD61Wa8towm3Nr8bUD3dAo/LCzmdGwUepEB2JiIgcZMOhStz16S4E+nojc/ZIqL3d6z2gvr4eAQEB5/X+bfORj+bmZsjlZ/6xCoUCFsvZT3ZVqVTQarVn3NzV4C4hiAv2RYOhDT9ml4mOQ0REDvRV+3YLN6TFul3xuFA2Lx8TJkzAK6+8gh9//BHHjh3DsmXL8J///AfXX3+9rZ/K5cjlMkzpnHjKSy9ERJ6isqEV69tPOPf0Sy6AHcrHO++8g5tuugkPPvggevXqhSeeeAJ///vf8dJLL9n6qVzS5AGxUMhl2H28DkcqGkTHISIiB/h2zwmYLRL6xwWiR4RGdBzhbF4+NBoN5s2bh+PHj6OlpQVHjx7Fyy+/DKVSaeuncknhWjVGJFk3lfl6F5fdEhG5O4tF6vz7/paBcYLTOAfP3N1EsI4dT7/bewKGNrPgNEREZE+ZhTU4XtMMf5UXxqdEiY7jFFg+BLiiexgitWrUNZvw04EK0XGIiMiOOjaXvK5fNHyVNt9eyyWxfAjgpZDj5vRYANzzg4jIndU1GbEmpxwAcGsGL7l0YPkQ5OYMHWQyYGt+DY7XNImOQ0REdvD9vhIYzRb0jtaibyx3tu7A8iFIbJAvhnUPA3DqkCEiInIfkiRh8Y7jADjR9PdYPgSaOsj6y/jN7mJOPCUicjM7CmtxtKoJvkoFJvWLFh3HqbB8CDQyKRwRWhVqmoxYy4mnRERu5csd1jl9E/vFQKP2FpzGubB8COSlkOOW9glIX2YeF5yGiIhspbrRgDU51mM0Oka56RSWD8FuHRgHhVyGHYW1yK/kjqdERO7gm90nYDJL6KcLRJ8YTjT9PZYPwSID1BjZvuNpxxAdERG5LotFwuKd1tFsjnqcHcuHE5h6WTwA4Ls9J9Bi5MRTIiJXtiW/GsW1LdCqvTA+hRNNz4blwwkM6xYKXbAP6lvbsOq3UtFxiIjoEnTM4btxQCx8lArBaZwTy4cTkMtluG2gdfSDl16IiFxXmb4F6w9VAuAll3Nh+XASk9Nj4a2QIav4JHJK9KLjEBHRRfh6VzHMFgmDEoPRLVwjOo7TYvlwEqH+KlzTx3ra4eKdHP0gInI1bWZL5yFyHXP56OxYPpxIxxDdin0laDS0CU5DREQX4pdDlSivb0WInxJjekeIjuPUWD6cyKDEYHQN80OT0Yzl+0pExyEiogvQMWdvcroOKi9OND0Xlg8nIpPJMHXQqYmnkiQJTkREROejqKYZm49UAQBu4yFyf4nlw8nc2D8WKi85csvqsbfopOg4RER0HhbvLIIkAVf0CENciK/oOE6P5cPJBPh6Y0KqdVOaz7cfExuGiIj+UqvJjK93WS+5cHnt+WH5cELTBycAAH7MLkNVg0FsGCIiOqdVv5WhrtmEmECfzuMy6NxYPpxQ39gA9NMFwmSWOts0ERE5p45R6tsGxcFLwbfV88HvkpOaPuTUxNM2s0VwGiIiOpus4pPYf0IPpUKOWzJ0ouO4DJYPJ3Vt3yiE+ClRpm/Fz7kVouMQEdFZfNY+6jE+JQoh/iqxYVwIy4eTUnkpcMtAa4tetO244DRERPR7NY0GrNpfBgC4Y0iC2DAuhuXDid02KB5yGbC9oAZHKhpExyEiotN8vbsYRrMFKe3z9Oj8sXw4sZhAH1ydbN2i97PtHP0gInIWZouELzOtCwLuaF+hSOeP5cPJdfxSf7/3BBpaTWLDEBERAGB9bgVKTrYgyNcb41OiRMdxOSwfTm5I15DO816+38vzXoiInEHHaPSUjDiovXmOy4Vi+XByMpkM09snMn22/RjPeyEiEiy/shG/5ldDLuOOpheL5cMFXJ8WAz+lAkermrDtaI3oOEREHu2LTOuox4ikCOiCeY7LxWD5cAEatTduHBAL4NSaciIicrxGQxu+23MCwKnNIOnCsXy4iGmXWX/J1x20TnIiIiLHW7avBA2GNnQJ9cPQrqGi47gslg8X0T1CgyFdQ2CRgM+57JaIyOEkScKibccAALdfFg+5XCY2kAtj+XAhd7ZPPP1qZxFajGaxYYiIPMyWI9XIr2yEv8oLk9NjRcdxaSwfLmRkrwjogn2gbzFh2T4uuyUicqRPthYCAG4aEAuN2ltwGtfG8uFCFHIZ7hySCMD6PwGX3RIROcbRqkZsyKuCTHZqFJouHsuHi5mcHgs/pQJH2teZExGR/XXM9RiZFI6EUD+xYdwAy4eL0aq9MTndetrtJ1uPiQ1DROQB9C0mfNu+vPauoYmC07gHlg8XNH1IAmQy4JdDlSisbhIdh4jIrS3dVYxmoxk921cd0qVj+XBBiaF+GNEzHADwafsEKCIisj2zRcKi9s0d7xqaAJmMy2ttgeXDRXUM/X275wTqedotEZFdrDtYgRN11tNrJ6XFiI7jNlg+XNTQbiHoEeGPJqMZS3cVi45DROSWPm4fXb5tEE+vtSWWDxclk8k6Rz8WbT8Gs4XLbomIbOlAqR47C2vhJZdh2mUJouO4FbuUj5KSEtx+++0ICQmBj48P+vbti927d9vjqTzapH4xCPT1RnFtC37OrRAdh4jIrXSsKBzbNwqRAWqxYdyMzctHXV0dhg4dCm9vb6xevRoHDx7Em2++iaCgIFs/lcfzUSpw28A4AKd23iMioktX1WDAyqxSAMDdQxPEhnFDXrb+A19//XXodDp88sknnfclJnJdtL1MGxyPDzYXILOgFgdL65EcrRUdiYjI5S3eUQSj2YJ+ukCkxfHDs63ZfORj5cqVSE9Px+TJkxEeHo60tDQsXLjwTx9vMBhQX19/xo3OX1SAD67tGwUA+OhXjn4QEV2qVpMZn2ceA2BdXku2Z/PyUVBQgPnz56N79+5Yu3YtHnjgATzyyCNYtGjRWR8/d+5cBAQEdN50Op2tI7m9v11uHVlaub8EFfWtgtMQEbm2FVklqG40IjpA3fnhjmzL5uXDYrGgf//+ePXVV5GWlob77rsP9957L95///2zPn727NnQ6/Wdt+JiLhu9UKm6QAxMCIbJLOHT9vMHiIjowlksEhZusY4i3zU0Ed4KLgq1B5t/V6OiopCcnHzGfb169UJRUdFZH69SqaDVas+40YX72zDr6MeXmcfRZGgTnIaIyDVtOlyF/MpG+Ku8MGUgR+LtxeblY+jQocjLyzvjvsOHDyM+Pt7WT0WnGdUrAomhfqhvbcM3uzl6RER0MRZuKQAA3DpQB63aW3Aa92Xz8vHYY48hMzMTr776KvLz87F48WIsWLAAM2bMsPVT0WnkchnuaZ/78dHWQm46RkR0gQ6U6rHtaA0Uchnu5Om1dmXz8pGRkYFly5bhq6++Qp8+ffDSSy9h3rx5mDp1qq2fin7nxv6xCGrfdGztgXLRcYiIXMqH7XM9xvWNQkygj+A07s3m+3wAwPjx4zF+/Hh7/NF0Dj5KBaZdFo+3f8nHgs0FGNsnkicwEhGdhzJ9C37Yb91U7N5hXQSncX+cxutmpg1OgNJLjqzik9hzvE50HCIil/Dp1mNos0i4rEsw+sYGiI7j9lg+3EyYRoXr+1mPfe6YOEVERH+u0dCGxTutKzI56uEYLB9uqGPZ7U8HK3CsuklwGiIi5/b1rmI0tLahS5gfruoZLjqOR2D5cEPdIzS4qmcYJAn4mAfOERH9qTazBR+3H01x77AukMs5T84RWD7cVMfQ4dLdxahrMgpOQ0TknFbnlKPkZAtC/JS4Pi1GdByPwfLhpgZ3DUFylBatJgs+zzwuOg4RkdORJKlzbty0wfFQeysEJ/IcLB9uSiaT4e9XWkc/Pt12DC1Gs+BERETOZdvRGvx2Qg+1txzTLuMu3I7E8uHGxvWNgi7YB7VNRnyzh1uuExGd7v1NRwEAt2TEIcRfJTiNZ2H5cGNeCjnua5/7sWBzAdrMFsGJiIicQ/YJPbYcqYZCLutcIUiOw/Lh5ian6xDip8SJuhb8mF0mOg4RkVN4f7N11OO61GjEBvkKTuN5WD7cnNpbgbuGJgAA5m88CknigXNE5NkKq5uwuv3DWMfcOHIslg8PMO2yBPgpFThU3oCNeVWi4xARCbVgcwEsEjAiKRxJkVrRcTwSy4cHCPD1xtT2mdzz2ydYERF5osr6Vny35wQA4IHhXQWn8VwsHx7i7qGJ8FbIsLOwFnuO14qOQ0QkxMdbj8FotiA9PggZCcGi43gslg8PERmgxg1psQCA+Rt54BwReZ76VhO+bN908f4rOeohEsuHB7nvyi6QyYCfcytwpKJBdBwiIof6MrMIDYY29Ijwx4gkHiAnEsuHB+ka5o8xyZEAgPc3cfSDiDxHq8mMj9oPkPv7FV15gJxgLB8e5v72CVYrskpQerJFcBoiIsf4fm8JqhsNiA5Q47p+0aLjeDyWDw/TTxeIIV1D0GaRsGAzRz+IyP21mS34oH1TsXuv6AJvBd/6RONPwAM9OLwbAOCrnUWoajAITkNEZF8//FaK4zXNCPZTYkqGTnQcAsuHRxraLQT9dIEwtFnw4a8c/SAi92WxSHj3l3wAwD2XJ8JX6SU4EQEsHx5JJpPhkZHW0Y8vth9HXZNRcCIiIvtYc6AcR6uaoFV74Y7B8aLjUDuWDw91Vc9wJEdp0WQ045OthaLjEBHZnCRJeKd91OOuoYnQqL0FJ6IOLB8eSiaT4eER1tGPT7YdQ32rSXAiIiLbWp9bidyyevgpTx2wSc6B5cODjekdiW7h/mhobcPn24+LjkNEZDOSJOGdDdZRj2mDExDoqxSciE7H8uHB5HIZHrrKOvrx4ZYCNBvbBCciIrKNX/Orsb/4JNTecvxtWKLoOPQ7LB8ebnxKFBJCfFHXbMKXmUWi4xAR2cQ7662jHrcNjEeov0pwGvo9lg8P56WQd+77sWBLAVpNZsGJiIguzY6CGuw8VgulQo77rugiOg6dBcsHYVJaDGICfVDVYMDS3cWi4xARXZJ32+d6TE6PRWSAWnAaOhuWD4LSS477r7R+Onh/41EY2yyCExERXZx9RXXYcqQaCrkM91/ZVXQc+hMsHwQAmJyuQ7hGhVJ9K77fe0J0HCKii9Kxm+n1aTHQBfsKTkN/huWDAABqb0XntdF3N+Rz9IOIXM5vJ05i/aFKyGXAg8M56uHMWD6o09RB1lnhJ+pa8O0ejn4QkWt5a91hAMCkfjHoEuYvOA2dC8sHdfJRKjo/LbzH0Q8iciH7iuqwIa8KCrkMD4/sLjoO/QWWDzrDbYPiEK5RoeRkC1e+EJHLmPfzEQDWuR6JoX6C09BfYfmgM6i9zxz9MLRx3w8icm57jtdh0+H2UY/2M6vIubF80B/cMjAOkVo1yvStWLqLox9E5Nzm/Wyd63Fj/xjEh3DUwxWwfNAfqL0VmHGVdfTj3Q353PWUiJzW7mO12HKkGl5yGR4ewbkeroLlg87q5gwdogPUqKg3YMlOnvlCRM7prfZRj8npsdzXw4WwfNBZqbwUeLD9xNv/t/EoRz+IyOnsLKzF1vwaeCtkmHEV53q4EpYP+lM3p+sQE+iDygYDFu/g6AcROZeOfT0mp+sQG8RRD1fC8kF/Suklx0MjTo1+tBg5+kFEzmH70RpsL6iBUiHnqIcLYvmgc7ppQCxig3xQ3WjAF5nHRcchIoIkSZ1zPaZkWEdoybWwfNA5eSvkeKR9Bvn8TUfRaGgTnIiIPN3mI9XYWVgLpZccD17FM1xckd3Lx2uvvQaZTIaZM2fa+6nITm7oH4MuoX6obTLioy2FouMQkQezWCT8a+0hAMC0y+IRFcBRD1dk1/Kxa9cufPDBB0hJSbHn05CdeSnkmDW6BwBg4ZYC1DYZBSciIk+15kA5ckrq4XfaWVTkeuxWPhobGzF16lQsXLgQQUFB9noacpBr+0Shd7QWjYY2zN+YLzoOEXmgNrMF//4pDwDwt2FdEOKvEpyILpbdyseMGTMwbtw4jBo16pyPMxgMqK+vP+NGzkcul+EfY3oCABZtP44yfYvgRETkab7fW4KCqiYE+Xrjb8MSRcehS2CX8rFkyRLs3bsXc+fO/cvHzp07FwEBAZ03nU5nj0hkA1f2CMPAhGAY2yx4ez1HP4jIcVpN5s4zXB4c3g0atbfgRHQpbF4+iouL8eijj+LLL7+EWq3+y8fPnj0ber2+81ZczIPMnJVMJsOT11hHP5buLkZhdZPgRETkKRbvKEKpvhWRWjWmDY4XHYcukc3Lx549e1BZWYn+/fvDy8sLXl5e2LRpE95++214eXnBbD5zoyqVSgWtVnvGjZxXekIwRiSFw2yROncXJCKyp0ZDG97bYB1tfXRUd6i9FYIT0aWyefkYOXIksrOzkZWV1XlLT0/H1KlTkZWVBYWCvzSu7onR1tGPlftLcbCUc3SIyL4+/rUQNU1GJIb64aYBsaLjkA3YvHxoNBr06dPnjJufnx9CQkLQp08fWz8dCZAcrcWE1GgA6Jx5TkRkD3VNRizcXAAAeOzqHvBWcG9Md8CfIl2UWVf3gEIuwy+HKrH7WK3oOETkpt7fdBQNhjYkR2kxvm+U6DhkIw4pHxs3bsS8efMc8VTkIImhfrg53boy6fU1hyBJkuBERORuSk+24NNtxwAA/xjTE3K5TGwgshmOfNBFmzmqO9Tecuw6VoefDlaIjkNEbubNnw7D0GbBwMRgDO8ZJjoO2RDLB120CK0a9w7rAgB4ffUhmMwWwYmIyF0cLK3H9/tOAAD+eW0vyGQc9XAnLB90Se67ogtC/JQoqG7Ckp1FouMQkZuYuzoXkgSMT4lCP12g6DhkYywfdEk0am/MHNUdADDv5yNoNLQJTkRErm7z4SpsOVINb4UMT45JEh2H7IDlgy7ZLQPj0CXUDzVNRnyw6ajoOETkwswWCa/+LxcAcMfgBMSF+ApORPbA8kGXzFshx5PXWD+dLNxSgHJ9q+BEROSqlu0rwaHyBmjUXnjoqm6i45CdsHyQTYzpHYH0+CC0miz4zzpuPEZEF67VZMab7RsXPnRVNwT5KQUnInth+SCbkMlkmH1tLwDAt3tO4FA5t10nogvz8dZClOlbERPog+lDEkTHITti+SCbGRAfhGv7RsIiAa+tPiQ6DhG5kJpGA+ZvsM4Ze2JMDx4e5+ZYPsimnhyTBC+5DBvzqrA1v1p0HCJyEe/8ko8GQxt6R2sxMTVGdByyM5YPsqmEUD/cflk8AODlH3NhtnDbdSI6t6NVjfgi8zgA64Zi3Ebd/bF8kM09MrI7tGov5JbVY+nuYtFxiMjJvfJjLtosEkYkhWNot1DRccgBWD7I5oL9lHh0VA8AwL/X5qG+1SQ4ERE5q02Hq/DLoUp4yWV4Zlwv0XHIQVg+yC7uGByPrmHWjcfe/SVfdBwickImswUvrToIALhzSAK6hvkLTkSOwvJBduGtkOPZ8ckAgE+2FqKwuklwIiJyNl9kHkd+ZSOC/ZR4eGR30XHIgVg+yG6u6hmO4T3DYDJLeOXHXNFxiMiJ1DUZMe/nIwCAx0f3QICPt+BE5EgsH2RXz45Lhpdchp9zK/DrES69JSKrt34+DH2LCUmRGtySESc6DjkYywfZVbdwf0wbbF16++KqA2gzWwQnIiLRDlc04MsdRQCA5yckQ8GltR6H5YPsbubIHgjy9cbhikZ8tbNIdBwiEkiSJLy06iDMFgljekdgSFcurfVELB9kdwG+3ph1tXXp7X/WHYa+mUtviTzV+txKbDlSDaVCjmeuTRYdhwRh+SCHuHVgHHpGaFDXbMJbPx8WHYeIBDC0mfHK/6yTz+++PBFxIb6CE5EoLB/kEF4KOZ6fYP2U83nmceSW8dRbIk/z4RbrsvswjQozruoqOg4JxPJBDjO0WyjG9Y2C2SLh+RU5kCSe+0LkKUpOtuCdX6xLa5+5thc0ai6t9WQsH+RQz47vBV+lAruO1eH7vSWi4xCRg7z0w0G0miwYmBiMif2iRcchwVg+yKGiAnzwSPtOhnNX50LfwsmnRO5uY14l1hwoh0Iuw0sT+0Am49JaT8fyQQ5399BEdA3zQ3WjEW+t4+RTInfWajJjzsoDAIC7hiSgZ6RGcCJyBiwf5HBKLzlenNgHAPDZ9mM4UKoXnIiI7GXh5gIcr2lGuEaFR0fx/BayYvkgIYZ2C8X4lChYJOC55TmwWDj5lMjdFNc2490N1lOtnxnHSaZ0CssHCfPsuGT4KhXYW3QS3+49IToOEdnYi6sOwtBmwWVdgnFdKieZ0iksHyRMZIAaM9uHYV9bfYg7nxK5kV8OVWDdwQp4cZIpnQXLBwl119BEdA/3R22TEf/66ZDoOERkA60mM15YeRAAcM/liegewUmmdCaWDxLKW3Fq8umXO4qw53id4EREdKne+eUIimqbEalV4+GRnGRKf8TyQcIN7hqCmwbEQpKAf36fDWObRXQkIrpIh8rr8cGmAgDA/03sDX+Vl+BE5IxYPsgpPHNtLwT7KZFX0YCFWwpExyGii2C2SHj6u2y0WSSM6R2BMb0jRUciJ8XyQU4hyE+J58dbD5777/ojKKxuEpyIiC7UlzuOI6v4JPxVXvi/6/qIjkNOjOWDnMbEftEY1j0UxjYL/vl9Ng+eI3IhZfoWvLEmDwDw1DU9ERmgFpyInBnLBzkNmUyGVyb1hdpbju0FNfh2D/f+IHIVc1YcQKOhDf3jAjF1ULzoOOTkWD7IqcSF+OKxUT0AAK/8LxfVjQbBiYjor6zJKcdP7Xt6zL0hBXI59/Sgc2P5IKdzz+WJSI7S4mSzCS+vOig6DhGdQ32rCXNW5gAA7r+yKw+Oo/PC8kFOx0shx9wb+kIuA5ZnlWLT4SrRkYjoT/xrTR4q6g1IDPXDQyO6iY5DLoLlg5xSqi4Qdw5JBGDd+6PR0CY4ERH93q5jtfhix3EAwCvX94HaWyE4EbkKlg9yWo+P7oHYIB+UnGzBa6tzRcchotO0GM34xzf7IUnAzemxGNI1VHQkciEsH+S0/FReeOPGFADAF5lF2JZfLTgREXX419o8HKtpRlSAGs+279FDdL5YPsipDekWiqmD4gAAT373G5p4+YVIuJ2FtfhkWyEA4NUb+kKr9haciFyNzcvH3LlzkZGRAY1Gg/DwcEyaNAl5eXm2fhryILOv7YWYQB+cqGvBa6t58i2RSC1GM5789tTllqt6houORC7I5uVj06ZNmDFjBjIzM7Fu3TqYTCaMHj0aTU3cLpsujr/KC/+6yXr55fPM47z8QiQQL7eQLcgkO+9hXVVVhfDwcGzatAlXXHHFXz6+vr4eAQEB0Ov10Gq19oxGLuaZZdn4ckcRYoN8sHbmFfDjaZlEDrWzsBZTFmyHJAGf3JXBUQ86w4W8f9t9zoderwcABAcHn/XrBoMB9fX1Z9yIzoaXX4jE4eUWsiW7lg+LxYKZM2di6NCh6NPn7Ccczp07FwEBAZ03nU5nz0jkwnj5hUgcXm4hW7Jr+ZgxYwZycnKwZMmSP33M7NmzodfrO2/FxcX2jEQu7vTVL//49jfUt5oEJyJyf5kFNVzdQjZlt/Lx0EMPYdWqVdiwYQNiY2P/9HEqlQparfaMG9G5zL62F3TB1s3HXlh5QHQcIrembzHh8aXWyy1T0nW83EI2YfPyIUkSHnroISxbtgy//PILEhMTbf0U5OH8VV546+Z+kMuA7/eWYNVvpaIjEbmtOStyUHKyBfEhvnh+Ai+3kG3YvHzMmDEDX3zxBRYvXgyNRoPy8nKUl5ejpaXF1k9FHiw9IRgzrrIeYvXMshyU6fn7RWRrK7JKsDyrFAq5DG9N6ccVZmQzNi8f8+fPh16vx/DhwxEVFdV5+/rrr239VOThHhnZHSmxAdC3mPDEN/thsdh11TiRRyk52YJnl+cAAB66qhv6xwUJTkTuxC6XXc52u/POO239VOThvBVyzJvSDz7eCmzNr8HHWwtFRyJyC2aLhMeXZqGhtQ39dIF4aEQ30ZHIzfBsF3JpXcL88ez4XgCAN9bkIbeM+8QQXaoPtxQgs6AWvkoF5k3pB28F3yrItvgbRS7vtoFxGNUrHEazBTOXZKHVZBYdichlHSjV498/Wc/jmjMhGQmhfoITkTti+SCXJ5PJ8NqNKQj1VyKvogFvrOFBhkQXo9VkxswlWTCZJYxOjsDN6dz0keyD5YPcQqi/Cm+073768dZC/HKoQnAiItfzfz8cxJHKRoRpVHjtxhTIZDLRkchNsXyQ2xiRFIE7hyQAAGYt3Y/Sk1x+S3S+Vu4vxVc7iyCTAf+5ORXBfkrRkciNsXyQW5l9bRL6xgTgZLMJj3y1DyazRXQkIqdXWN2E2d/9BsC6rHZY9zDBicjdsXyQW1F5KfDebf2hUXlh9/E6/GfdYdGRiJxaq8mMGV/uRZPRjIGJwXh0ZHfRkcgDsHyQ24kL8cVrN1rnf8zfeBQb8yoFJyJyXq/8mIuDZfUI9lPi7VvS4MVlteQA/C0jtzQuJQq3X2Y9/XbW0v0o17cKTkTkfH78rQyfZx4HYJ3nERmgFpyIPAXLB7mtZ8clIzlKi9omIx75ah/aOP+DqNPxmiY81T7P4/4ru2I4T6slB2L5ILel9lbgvan94adUYOexWsz7+YjoSEROwdBmxkOL96HR0IYB8UF4fHQP0ZHIw7B8kFtLDPXDqzf0BQC8uyEf63O5/wfRCysPIrtEj0Bfb7xzaxq3TyeH428cub2J/WIw7bJ4AMDMr7NQWN0kOBGROEt2FnXu5/HWlH6IDvQRHYk8EMsHeYTnxidjQHwQGlrbcN9nu9FkaBMdicjh9hXV4fkVBwAAj1/dA1dxngcJwvJBHkHpJcf8qf0RrlHhSGUj/vHtfkiSJDoWkcNUNRjwwBd7YTRbMDo5Ag8O7yY6Enkwlg/yGOFaNebf3h/eChn+l12ODzYXiI5E5BAmswUzFu9FeX0ruob54c2bUyGX89wWEoflgzzKgPhgPD+hNwDgjTWHsOVIleBERPb36v9ysbOwFv4qL3wwLR0atbfoSOThWD7I49w+KA6TB8TCIgEPf7UPxbXNoiMR2c2yfSfwydZjAIA3b05Ft3B/sYGIwPJBHkgmk+GlSX2QEms9gO7vn+9Bs5ETUMn95JToMfv7bADAwyO6YUzvSMGJiKxYPsgjqb0VeP/2AQjxU+JgWT1mLsmCxcIJqOQ+yvWtuGfRLrSaLBjeMwwzR3EjMXIeLB/ksaIDffDBtAFQKuT46WAF3libJzoSkU00G9vwt892oaLegO7h/nj71jQoOMGUnAjLB3m09IRgvHGT9QTc9zcdxdLdxYITEV0ai0XCzCVZyCmpR4ifEh/fmQEtJ5iSk2H5II83KS0Gj4zsDgD45/fZ2H60RnAioov3+tpD+OlgBZReciy4YwB0wb6iIxH9AcsHEYDHRnXHhNRotFkk3P/FHhRUNYqORHTBvt5VhA82Wfev+ddNKRgQHyw4EdHZsXwQwboC5l83pSAtLhD6FhPuWbQbJ5uNomMRnbdtR6vxzLIcAMAjI7tjYr8YwYmI/hzLB1E7tbcCC6alIybQB4XVTfj753tgaDOLjkX0l45WNeKBL/aizSJhQmo0HhvVXXQkonNi+SA6TZhGhY/vzIC/ygs7Cmsx6+v9MHMJLjmxcn0r7vhoJ/QtJqTFBeJfN6VAJuPKFnJuLB9Ev9MzUoP3bx8Ab4UMP2aX4YWVB3gIHTklfbMJ0z/eiZKTLUgM9cOHd6RD7a0QHYvoL7F8EJ3F5d1D8Z+b+0EmAz7PPI53fskXHYnoDK0mM+5ZtAt5FQ0I16jw2d0DEeKvEh2L6LywfBD9iQmp0Xih/RC6/6w7jC93HBeciMiqzWzBQ4v3YvfxOmjUXlh090AuqSWXwvJBdA7ThyTg4RHdAADPLc/BmpwywYnI00mShH8uy8bPuZVQesnx0fQM9IrSio5FdEFYPoj+wqyre+DWgTpYJOCRr7K4CRkJ9cbaPCzdfQJyGfDurWkYmMi9PMj1sHwQ/QWZTIaXJvbB6OQIGM0W3PfZbuwvPik6FnmgBZuPYv7GowCAV6/vi9E8pZZcFMsH0XnwUsjx9q1pGJQYjAZDG6Z9tAM5JXrRsciDfPxrIV793yEAwD/G9MQtA+MEJyK6eCwfROdJ7a3AR3dmYEB8EOpb23D7RzuQW1YvOhZ5gM+3H8OLqw4CAB4e0Q0zruomOBHRpWH5ILoA/iovfHpXBlJ1gTjZbMLUD3fgcEWD6FjkxhbvKMJzKw4AAO6/sitmXd1DcCKiS8fyQXSBNGpvfHb3QPSNCUBtkxG3LdyB/EoeREe2t3R3Mf65LBsA8LfLE/HUNT25eym5BZYPoosQ4OONz+8ZiOQoLaobDbhtYSYKq5tExyI38v3eE3jqu98AAHcOScAz43qxeJDbYPkgukiBvkp88bdBSIrUoLLBgFsXZKKgiiMgdOmW7yvBE9/shyQBt18WhzkTklk8yK2wfBBdgmA/awHpHu6P8vpW3PzBdhws5SRUunifZx7HY0uzYJGAWzJ0ePG6Piwe5HZYPoguUai/Ckvuuwy9o7WobjTilgXbsed4rehY5IL+38Z8PLc8B5JkvdTy6vV9IZezeJD7YfkgsoEQfxUW33sZ0juW4X64E78eqRYdi1yEJEl4bfUhvLEmD4B1Oe2cCcksHuS2WD6IbMQ6CXUQrugRhhaTGXd/ugtrD5SLjkVOzmKR8NyKHLy/ybpz6T+vTcLjo7mqhdwbyweRDfkoFVh4xwCM7RMJo9mCB7/ci+/3nhAdi5yUyWzBrKVZ+CKzCDIZMPeGvrjviq6iYxHZnd3Kx3vvvYeEhASo1WoMGjQIO3futNdTETkVlZcC79yahpsGxMJskTBr6X68v+koJEkSHY2cSKOhDfd+thvLs0rhJZfhv7ek4VZumU4ewi7l4+uvv8asWbMwZ84c7N27F6mpqRgzZgwqKyvt8XRETsdLIccbN6bg7qGJAIDXVh/CP5flwGS2CE5GzqBM34Kb5m/DxrwqqL3lWHDHAFyXGi06FpHDyCQ7fBwbNGgQMjIy8O677wIALBYLdDodHn74YTz99NPn/G/r6+sREBAAvV4PrVZr62hEDvfJ1kK8tOogLBIwrHso3pvaH1q1t+hYJEhOiR73LNqFinoDwjQqfDQ9HSmxgaJjEV2yC3n/tvnIh9FoxJ49ezBq1KhTTyKXY9SoUdi+ffsfHm8wGFBfX3/Gjcid3DU0EQumpcPHW4EtR6oxef52lJxsER2LBFifW4GbP9iOinoDekT4Y9mDQ1g8yCPZvHxUV1fDbDYjIiLijPsjIiJQXv7Hmf9z585FQEBA502n09k6EpFwo5Ij8M39gxGuUSGvogGT3tuK7BN60bHIgT7dWoh7P9uNZqMZw7qH4tsHhiA2yFd0LCIhhK92mT17NvR6feetuLhYdCQiu+gTE4DlM4YiKVKDqgYDbv5gO1buLxUdi+zM2GbBs8uz8cIP1ktvtw7U4eM7M3jpjTyazctHaGgoFAoFKioqzri/oqICkZGRf3i8SqWCVqs940bkrqIDffDN/YNxZfteII98tQ8v/nCQE1HdVJm+BVMWbMcXmUUAgKeuScKr1/eFt0L45z4ioWz+f4BSqcSAAQOwfv36zvssFgvWr1+PwYMH2/rpiFyORu2Nj+/MwIyrrPs5fLy1ELctzERlfavgZGRL2/KrMf7tX7Gv6CS0ai98cmcGHhjelZuHEcFOl11mzZqFhQsXYtGiRcjNzcUDDzyApqYm3HXXXfZ4OiKXo5DL8I8xSVgwbQA0Ki/sOlaHa9/+FTsKakRHo0skSRLe33QUt3+0AzVNRiRHabHq4WG4KilcdDQip+Fljz90ypQpqKqqwvPPP4/y8nL069cPa9as+cMkVCJPN7p3JFY+rMH9n+9BXkUDbvtwB2aPTcI9lyfyE7ILamg14Ylv9mPtAetl5xv7x+KV6/tA7a0QnIzIudhln49LwX0+yBM1G9vwz++zsTzLOgF1RFI4Xr8xBWEaleBkdL52HavFY19n4URdC5QKOeZcl4zbBsaxRJLHuJD3b5YPIichSRI+zzyOl3/MhbHNghA/JV67MQVXJ3PE0JkZ2yz47/rDmL/xKCwSEBPog/em9kc/XaDoaEQOxfJB5MLyyhvw6JJ9OFTeAAC4JUOH58Ynw09ll6ukdAnyKxsw8+ss5JRYN0e8sX8sXrguGRouoyUPxPJB5OIMbWb856fDWLClAJIExIf44q0p/dA/Lkh0NMKpUapXfsyFoc2CQF9vzL2+L8b2jRIdjUgYlg8iN7H9aA0eX5qFUn0rFHIZ7h6agJmjenAURKDC6iY8uzwbW/OtK5OGdQ/FvyenIkKrFpyMSCyWDyI3om8xYc6KnM7JqDGBPnjhut6cC+JghjYz5m88iv+38SiMbRaovOSYPTYJdwxOgFzOSaVELB9EbmjDoUo8tyIHJ+qsh9KNTo7AC9f1RnSgj+Bk7m/b0Wo8uywHBdVNAIAreoThpYm9ER/iJzgZkfNg+SByUy1GM/67/gg+3FKANosEP6UCj13dA9OHJHDLbjuobjTg1R9z8f2+EgBAmEaF58cnY3xKFJfQEv0OyweRm8srb8Azy7Kx+3gdAKBLqB+evKYnxvSO5JuiDTQZ2vDRr4VYsLkAjYY2yGTAtMvi8cSYnjwQjuhPsHwQeQCLRcLS3cX419o81DQZAQD9dIGYPTYJg7qECE7nmkxmC77eVYx5Px9BdaMBAJASG4AXJ/bhvh1Ef4Hlg8iDNBrasGBzAT7cUoBmoxkAMDIpHE9ek4SekRrB6VyDJElYnVOOf63NQ2H7vI74EF/8Y0xPXNsnihNKic4DyweRB6psaMXb64/gq53FMFskyGTAtX2icN8VXZDKT+1n1Wa24H855fhg01EcKLVuFBbip8Sjo7rjlow4KL04j4bofLF8EHmwgqpGvPnTYfyYXdZ53+AuIbjvyi4Y3iOMc0JgPUtn6a5ifPhrYefqIV+lAvcO64J7r+gCf+6jQnTBWD6ICIfK67FgcwFWZpWizWL93zwpUoN7h3XBhNRoj/xUX91owGfbjuGzzOM42WwCAAT7KXHnkARMuyweQX5KwQmJXBfLBxF1Kj3Zgo9/LcRXO4vQ1D4nJMRPiZvSY3FrRhwSQt17rwqLRUJmQQ2+3FmEnw6Uw2S2/pUXH+KLvw3rgskDYnnkPZENsHwQ0R/om034YsdxLNp2DJUNhs77ByYE4/r+Mbi2TxQCfN1nGWlBVSOW7yvB8qxSFNU2d96fqgvEfcO64Jo+kVBwIimRzbB8ENGfMpkt+OVQJRbvKMLmI1Xo+BtAqZDjih6hGNM7EqN6RbjkJYj8ykasPVCONTnlyC7Rd97vr/LCxH7RuHVgHPrEBAhMSOS+WD6I6LyUnmzByv2lWLa3BHkVDZ33K+QyDIgLwhU9QnFlj3D0jtY65XLTFqMZmYU12JRXhc2Hqzq3Pwesr+GK7qGYlBaDq5Mj4KvkJFIie2L5IKILllfegDU55VhzoBy5ZfVnfE2r9kJGQjAyEoORpgtE75gAh68IkSQJFfUGZJfosft4LXYV1iK7RN85hwMAvBUyDOkaimv6ROLq5AiE+qscmpHIk7F8ENElKa5txqbDVdh0uArb8qs7J6p2kMmAxFA/JEVq0C3MH13D/REf4ofoQDXC/FWXtJzXZLagXN+KE3UtKKxuQn5lI/KrGnGwtL5z19HTRQeocWXPMFzZIwxDuoVy+3MiQVg+iMhm2swWHCitx65jtdh1rBbZJ/Qo1bf+6eOVXnKE+asQ7KdEsJ8S/mov+Hgr4KtUdE7wlCTAaLag1WhGs9EMfYsJdc1G1DQZUdNogOVP/laSy4Du4Rr00wUiIzEYAxOCoQv24d4lRE6A5YOI7Kq60YCcEr11VKKyEUerGlFc24KKhlbY4m8UpZccMYE+iAv2Rbdwf3QL90ePCA2So7TwUXJZLJEzupD3b87AIqILFuqvwvCe4RjeM/yM+zsumVQ1GlDXZB3JaDa0ocVkQYuxDebTmolSoYCPUg61twIBPt4I8rWOlIRrVQj1UznlBFcisg2WDyKyGW+FHLpgX+iCfUVHISIn5nn7KxMREZFQLB9ERETkUCwfRERE5FAsH0RERORQLB9ERETkUCwfRERE5FAsH0RERORQLB9ERETkUCwfRERE5FAsH0RERORQLB9ERETkUCwfRERE5FAsH0RERORQTneqrdR+5HZ9fb3gJERERHS+Ot63O97Hz8XpykdDQwMAQKfTCU5CREREF6qhoQEBAQHnfIxMOp+K4kAWiwWlpaXQaDSQyWQ2/bPr6+uh0+lQXFwMrVZr0z/bFXj66wf4PfD01w/we8DX79mvH7Df90CSJDQ0NCA6Ohpy+blndTjdyIdcLkdsbKxdn0Or1XrsLx3A1w/we+Dprx/g94Cv37NfP2Cf78FfjXh04IRTIiIiciiWDyIiInIojyofKpUKc+bMgUqlEh1FCE9//QC/B57++gF+D/j6Pfv1A87xPXC6CadERETk3jxq5IOIiIjEY/kgIiIih2L5ICIiIodi+SAiIiKH8tjy8corr2DIkCHw9fVFYGCg6DgO8d577yEhIQFqtRqDBg3Czp07RUdymM2bN2PChAmIjo6GTCbD8uXLRUdyqLlz5yIjIwMajQbh4eGYNGkS8vLyRMdymPnz5yMlJaVzU6XBgwdj9erVomMJ89prr0Emk2HmzJmiozjMCy+8AJlMdsYtKSlJdCyHKikpwe23346QkBD4+Pigb9++2L17t5AsHls+jEYjJk+ejAceeEB0FIf4+uuvMWvWLMyZMwd79+5FamoqxowZg8rKStHRHKKpqQmpqal47733REcRYtOmTZgxYwYyMzOxbt06mEwmjB49Gk1NTaKjOURsbCxee+017NmzB7t378aIESMwceJEHDhwQHQ0h9u1axc++OADpKSkiI7icL1790ZZWVnn7ddffxUdyWHq6uowdOhQeHt7Y/Xq1Th48CDefPNNBAUFiQkkebhPPvlECggIEB3D7gYOHCjNmDGj89/NZrMUHR0tzZ07V2AqMQBIy5YtEx1DqMrKSgmAtGnTJtFRhAkKCpI+/PBD0TEcqqGhQerevbu0bt066corr5QeffRR0ZEcZs6cOVJqaqroGMI89dRT0uWXXy46RiePHfnwJEajEXv27MGoUaM675PL5Rg1ahS2b98uMBmJotfrAQDBwcGCkzie2WzGkiVL0NTUhMGDB4uO41AzZszAuHHjzvi7wJMcOXIE0dHR6NKlC6ZOnYqioiLRkRxm5cqVSE9Px+TJkxEeHo60tDQsXLhQWB6WDw9QXV0Ns9mMiIiIM+6PiIhAeXm5oFQkisViwcyZMzF06FD06dNHdByHyc7Ohr+/P1QqFe6//34sW7YMycnJomM5zJIlS7B3717MnTtXdBQhBg0ahE8//RRr1qzB/PnzUVhYiGHDhqGhoUF0NIcoKCjA/Pnz0b17d6xduxYPPPAAHnnkESxatEhIHqc71fZSPP3003j99dfP+Zjc3FyPm2REdLoZM2YgJyfHo653A0DPnj2RlZUFvV6Pb7/9FtOnT8emTZs8ooAUFxfj0Ucfxbp166BWq0XHEWLs2LGd/5ySkoJBgwYhPj4eS5cuxT333CMwmWNYLBakp6fj1VdfBQCkpaUhJycH77//PqZPn+7wPG5VPh5//HHceeed53xMly5dHBPGiYSGhkKhUKCiouKM+ysqKhAZGSkoFYnw0EMPYdWqVdi8eTNiY2NFx3EopVKJbt26AQAGDBiAXbt24b///S8++OADwcnsb8+ePaisrET//v077zObzdi8eTPeffddGAwGKBQKgQkdLzAwED169EB+fr7oKA4RFRX1h6Ldq1cvfPfdd0LyuFX5CAsLQ1hYmOgYTkepVGLAgAFYv349Jk2aBMDagtevX4+HHnpIbDhyCEmS8PDDD2PZsmXYuHEjEhMTRUcSzmKxwGAwiI7hECNHjkR2dvYZ9911111ISkrCU0895XHFAwAaGxtx9OhRTJs2TXQUhxg6dOgfltcfPnwY8fHxQvK4Vfm4EEVFRaitrUVRURHMZjOysrIAAN26dYO/v7/YcHYwa9YsTJ8+Henp6Rg4cCDmzZuHpqYm3HXXXaKjOURjY+MZn3AKCwuRlZWF4OBgxMXFCUzmGDNmzMDixYuxYsUKaDSazrk+AQEB8PHxEZzO/mbPno2xY8ciLi4ODQ0NWLx4MTZu3Ii1a9eKjuYQGo3mD/N7/Pz8EBIS4jHzfp544glMmDAB8fHxKC0txZw5c6BQKHDrrbeKjuYQjz32GIYMGYJXX30VN998M3bu3IkFCxZgwYIFYgKJXm4jyvTp0yUAf7ht2LBBdDS7eeedd6S4uDhJqVRKAwcOlDIzM0VHcpgNGzac9ec9ffp00dEc4myvHYD0ySefiI7mEHfffbcUHx8vKZVKKSwsTBo5cqT0008/iY4llKcttZ0yZYoUFRUlKZVKKSYmRpoyZYqUn58vOpZD/fDDD1KfPn0klUolJSUlSQsWLBCWRSZJkuT4ykNERESeikttiYiIyKFYPoiIiMihWD6IiIjIoVg+iIiIyKFYPoiIiMihWD6IiIjIoVg+iIiIyKFYPoiIiMihWD6IiIjIoVg+iIiIyKFYPoiIiMihWD6IiIjIof4/h2GNuxnsEp4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(plot_x, plot_y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算导数\n",
    "def derivate(theta):\n",
    "    return 2 * (theta - 2.5)\n",
    "\n",
    "# 计算损失函数\n",
    "def loss(theta):\n",
    "    try:\n",
    "        return (theta - 2.5) ** 2 - 1\n",
    "    except:\n",
    "        return float('inf') # 返回一个无穷大的数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 梯度下降\n",
    "def gradient_descent(init_theta, eta, epsilon=1e-8):\n",
    "    # 收集theata的值\n",
    "    theta_history = [init_theta]\n",
    "    theta = init_theta\n",
    "    # 记录循环次数\n",
    "    iter_i = 0\n",
    "\n",
    "    while iter_i < 8:\n",
    "        gradient = derivate(theta)  # 参数值对应的梯度\n",
    "        # 记录上一次theta的值\n",
    "        last_theta = theta\n",
    "        # 更新参数值\n",
    "        theta = theta - eta * gradient  \n",
    "        # 记录theta\n",
    "        theta_history.append(theta)\n",
    "        # 损失函数值\n",
    "        loss_v = loss(theta)\n",
    "        # 中断循环条件 （连续损失函数差小于一个阈值）\n",
    "        if abs(loss_v - loss(last_theta)) < epsilon:\n",
    "            break\n",
    "\n",
    "        iter_i += 1\n",
    "\n",
    "    return theta_history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_theta_history(theta_history):\n",
    "    plt.plot(plot_x, plot_y)\n",
    "    plt.plot(theta_history, loss(np.array(theta_history)), color='r', marker='+')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "theta = 0.0  # 参数初始值\n",
    "eta = 0.1  # 学习率\n",
    "epsilon = 1e-8  # 精度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9\n"
     ]
    }
   ],
   "source": [
    "theta_history = gradient_descent(theta, eta)\n",
    "# 训练次数\n",
    "len(theta_history) - 1\n",
    "# 绘制损失函数变化图\n",
    "plot_theta_history(theta_history)\n",
    "\n",
    "print(len(theta_history))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.500054842376601"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta_history[-1]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
